Ad Widget

Collapse

Парсинг HTML страницы Zabbix`om

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Stration
    Junior Member
    • Mar 2019
    • 21

    #1

    Парсинг HTML страницы Zabbix`om

    Добрый день.
    Возможно ли снимать данные с html страницы Zabbix`ом и строить график?

    Есть кусок кода <label id="lblstream">Поток 4000 kbps | К/С :25 fps</label> цифры "Поток 4000 kbps" постоянно меняются, вот их и нужно отслеживать.

    Click image for larger version

Name:	Screenshot_3.png
Views:	932
Size:	34.5 KB
ID:	430035

    Пробовал через настройку "элементы данных" как в статье- пример 5, не получается.

  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    что именно не получается?
    получить данные? или выдернуть строку?

    Comment

    • Stration
      Junior Member
      • Mar 2019
      • 21

      #3
      Originally posted by Hamardaban
      что именно не получается?
      получить данные? или выдернуть строку?
      И выдернуть строку и получить данные. Может нужно как то через Java скрипты, но я в этом не силен.

      Comment

      • Stration
        Junior Member
        • Mar 2019
        • 21

        #4
        Originally posted by Stration

        И выдернуть строку и получить данные. Может нужно как то через Java скрипты, но я в этом не силен.
        Когда Zabbix забирает вэб страницу HTTP агентом, то этой строки там нет.



        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <link href="public/css/main.css" rel="stylesheet" type="text/css" />
        <!--[if lt IE 7]>
        <script type="text/javascript" src="js/unitpngfix.js"></script>
        <![endif]-->
        <style type="text/css">

        html,body {
        scrollbar-base-color:#454545;
        scrollbar-face-color:#454545;
        scrollbar-track-color:#454545;
        scrollbar-arrow-color:#9e9e9e;
        scrollbar-3dlight-color:#9e9e9e;
        scrollbar-highlight-color:#454545;
        scrollbar-shadow-color:#9e9e9e;
        scrollbar-darkshadow-color:#454545;
        }
        -->
        </style>

        <script type="text/javascript" src="public/js/jquery-1.4.min.js"></script>
        <script type="text/javascript" src="public/js/tab.js"></script>
        <script language="javascript" src="public/js/setCookie.js" type="text/javascript"></script>
        <script language="javascript" src="public/js/common.js"></script>
        <script language="javascript" src="public/js/version.js"></script>
        <script language="JavaScript" src="/public/js/get_customize_menu.js" type="text/javascript"></script>
        <script language="javascript" src="public/js/index.js"></script>
        <script language="javascript" src="language/" ></script>
        <script language="javascript" src="public/js/translate.js" ></script>
        <script type="text/javascript">
        // 测试数据
        // 测试数据
        function MM_swapImgRestore() { //v3.0
        var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
        }
        function MM_preloadImages() { //v3.0
        var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
        var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
        if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
        }

        function MM_findObj(n, d) { //v4.01
        var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
        if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
        for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
        if(!x && d.getElementById) x=d.getElementById(n); return x;
        }

        function MM_swapImage() { //v3.0
        var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
        if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
        }

        // 新增
        var add = function(num,i){

        tab.add(window.options[i]);
        TopFrame(num,i);

        };

        // 解锁与锁定
        var lock = function( isLock ){
        tab.lock("1",isLock);
        };
        // 关闭
        var remove = function( id ){
        tab.close(id);
        };

        // 移动
        var move = function( state ){
        tab.move({action:state});
        };

        jQuery( function(){

        browsertype = getCookie("s_browsertype");
        if(browsertype == 1){
        window.options = [
        {id:"1",name:"Live",lock:true,url:"newie/live6200.asp",title:"Live",frame:{name:'PreFrame', style:'width:100%;height:100%'}},
        {id:"2",name:"playback",lock:false,url:"newie/playback.asp",title:""},
        {id:"3",name:"Setup",lock:false,url:"para.asp",tit le:"Setup"},
        {id:"4",name:"File",lock:false,url:"newie/file.asp",title:"File"},
        {id:"5",name:"Log",lock:false,url:"public/log.asp",title:"Log"}];


        }else{
        window.options = [
        {id:"1",name:"Live",lock:true,url:"flash/live6200.asp",title:"Live",frame:{name:'PreFrame', style:'width:100%;height:100%'}},
        {id:"2",name:"playback",lock:false,url:"flash/playback.asp",title:""},
        {id:"3",name:"Setup",lock:false,url:"para.asp",tit le:"Setup"},
        //{id:"3",name:"File",lock:false,url:"newie/file.asp",title:"File"},
        {id:"4",name:"Log",lock:false,url:"public/log.asp",title:"Log"}];
        //{id:"4",name:"para",lock:true,url:"para.asp",title :""}];

        $("#logo").attr("src","images/logo_f.png");

        }








        var frag = document.createDocumentFragment(); // 创建文档碎片
        $.each(window.options, function(i, item) {

        var div = document.createElement("div");
        //div.style ="cursorointer;";
        div.id="top"+i;
        div.className = i==0?"nav_2":"nav_1";
        div.onMouseover = function(){
        this.className="nav_2"
        };
        div.onMouseout = function(){
        return TopMouseOut(window.options.length-1,i);
        };

        var a = document.createElement('a');
        a.id = "toplink"+i;
        //a.style = "cursorointer;";
        a.onclick = function(){
        add( window.options.length-1,i);
        }
        div.appendChild(a);

        frag.appendChild(div); // 这里不会刷新DOM
        });
        $_id('topmenu').appendChild(frag);

        trans(langObj);
        if(browsertype == 1){
        var vec = document.getElementsByTagName('a');
        vec[0].innerHTML = langObj.i18n_live;
        vec[1].innerHTML=langObj.i18n_playBack;
        vec[2].innerHTML = langObj.i18n_cfg;
        vec[3].innerHTML = langObj.i18n_fileManage;
        vec[4].innerHTML = langObj.i18n_log;

        }
        else
        {
        var vec = document.getElementsByTagName('a');
        vec[0].innerHTML = langObj.i18n_live;
        vec[1].innerHTML = langObj.i18n_playBack;
        vec[2].innerHTML = langObj.i18n_cfg;
        vec[3].innerHTML = langObj.i18n_log;


        }



        var option = {tabID:"Tabs",frameID:"Frames",activeClass:"on",lo ckClass:"locked",leftID:"Left",
        rightID:"Right",resetID:"Reset",closeID:"Close"};
        window.tab = FantasyTab.create(option);
        window.tab.add(window.options[0]);


        });
        //document.getElementById('baidu').click();
        </script>
        <script type="text/javascript">
        <!--

        //-->
        </script>
        </head>


        <body style="display:none">

        <body onload="MM_preloadImages('images/minus1.gif','images/plus1.gif','images/7a.png','images/6a.png','images/k1a.gif','images/k2a.gif','images/k3a.gif','images/k4a.gif','images/k5a.gif','images/k6a.gif','images/k7a.gif','images/k8a.gif','images/k9a.gif','images/5a.gif','images/6a.gif','images/7a.gif','images/8a.gif','images/9a.gif','images/11a.gif','images/12a.gif','images/13a.gif','images/14a.gif','images/15a.gif','images/16a.gif','images/17a.gif','images/18a.gif');InitIndex();"onresize="ReinitIframe();">

        <div class="top">

        <div class="top_01">
        <div class="top_mt1"><img src="images/logo.png" /></div>
        <div class="mt40 bold f14"><label id="lblmolNO"><!--HICC-2600T TTTTTTTTTTTT--></label>&nbsp;&nbsp;<label id="lblversion" style="display:none">V1.0.0</label></div>
        </div>

        <div class="top_02">
        <div class="nav" id="topmenu">

        <!--<div id="top0" class="nav_2" style="cursorointer" onmouseover="this.className='nav_2'" onMouseOut="return TopMouseOut(0);"><a id="toplink0" onclick="add(0)">{{i18n_live}}</a></div>
        <div id="top1" class="nav_1" style="cursorointer" onmouseover="this.className='nav_2'" onMouseOut="return TopMouseOut(1);"><a id="toplink1" style="display:none" onclick="add(1)">{{i18n_cfg}}</a></div>
        <div id="top2" class="nav_1" style="cursorointer" onmouseover="this.className='nav_2'" onMouseOut="return TopMouseOut(2);"><a id="toplink2" style="display:none" onclick="add(2)">{{i18n_fileManage}}</a></div>
        <div id="top3" class="nav_1" style="cursorointer" onmouseover="this.className='nav_2'" onMouseOut="return TopMouseOut(3);"><a id="toplink3" style="display:none" onclick="add(3)">{{i18n_log}}</a></div>-->


        </div>
        </div>
        <div class="fr">
        <div class="mt10 f16 bold pr20"><label id="lblserNO"><!--Super HD Series--></label></div>
        <div class="logc"><label id="lblUserName"><!--admin--></label>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="login.asp" >{{i18n_logout}}</a></div>
        </div>
        </div>

        <!-- 此DIV发布时候隐藏-->
        <div id="TabMain" style="display:none" >
        <div class="c_tabNav"><div class="tabNavWrapper">
        <div><div class="tab"><div class="maxWidth">
        <!-- 这里存放生成的Tab-->
        <ul id="Tabs"></ul>
        </div></div></div>
        </div>
        </div>
        </div>
        <!-- 这里存放生成的IFrame 只要ID='Frames'就可以,可以根据布局自己定义-->

        <div id="Frames" style="height:645px">

        </div>

        </body>

        </html>

        Comment

        • Hamardaban
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • May 2019
          • 2713

          #5
          вероятно страничка делается на стороне клиента с помощью JS а curl этого не умеет.

          Comment

          • Victor Sklyarov
            Senior Member
            • Apr 2016
            • 184

            #6
            Умеет и CURL и WGET. Просто реализация http запроса в zabbix убогая. Решение. Положите скрипт name_script.sh с содержимым wget -q --no-proxy --http-user=$1 --http-password=$2 -t 2 -T 20 http://$3/$4 -O - в директорию для externalscript на сервере zabbix. Дайте права на его выполнение. Создайте элемент данных типа Внешняя проверка с ключом name_script.sh["{$USER}", "{$PASSWD}", "{HOST.CONN}", "имя страницы.htm"]. Элемент будет получать весь текст требуемой страницы. Далее создайте зависимый элемент данных и предобработкой и регуляркой выдерните ваше значение. Для curl свои параметры в скрипте, но смысл тот же.

            Comment

            • wins
              Senior Member
              • Sep 2014
              • 307

              #7
              а кроме как из веб данные о потоке никак вытянуть нельзя?

              Comment

              • Victor Sklyarov
                Senior Member
                • Apr 2016
                • 184

                #8
                В дополнение. Элемент данных внешняя проверка должен иметь период хранения равным или меньше периода опроса, и не должен сохранять историю. Регулярка для зависимого элемента lblstream">\S+\s+(\d+) Забираем найденное значение \1 Неизвестно какая кодировка кириллицы у вас, поэтому ищем значение ID элемента <label>, поскольку id всегда уникален на странице.

                Comment

                • Victor Sklyarov
                  Senior Member
                  • Apr 2016
                  • 184

                  #9
                  Параметры скрипта [wget -q --no-proxy --http-user=$1 --http-password=$2 -t 2 -T 20 http://$3/$4 -O -] подгоните под свои условия. Если не нужна авторизация, то уберите -http-user=$1 --http-password=$2 и -t достаточно сделать равным 1 и уберите их передачу в скрипт: name_script.sh[ "{HOST.CONN}", "имя страницы.html"] Если нужен прокси, то пропишите его.

                  Comment

                  • Stration
                    Junior Member
                    • Mar 2019
                    • 21

                    #10
                    Originally posted by Victor Sklyarov
                    Параметры скрипта [wget -q --no-proxy --http-user=$1 --http-password=$2 -t 2 -T 20 http://$3/$4 -O -] подгоните под свои условия. Если не нужна авторизация, то уберите -http-user=$1 --http-password=$2 и -t достаточно сделать равным 1 и уберите их передачу в скрипт: name_script.sh[ "{HOST.CONN}", "имя страницы.html"] Если нужен прокси, то пропишите его.
                    Огромное спасибо! Буду пробовать.

                    Comment

                    Working...